package controller

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
)

/**
 * Package controller
 * @File : string.go
 * @Description : 存放用于操作string的方法
 * @Author : 吴概
 * @Date : 2023/2/13
 */

// ParseInt 将string类型转成int
func ParseInt(s string) int64 {
	temp, err := strconv.ParseInt(s, 10, 64)
	if err != nil {
		fmt.Println(err)
		return 0
	}
	return temp
}

// 将string类型的list转换成int型数组
func GetIdList(list string) []int64 {
	if list == "" {
		return []int64{}
	}
	list2 := strings.Split(list, ",")
	res := make([]int64, len(list2))
	for i := range list2 {
		res[i] = ParseInt(list2[i])
	}
	return res
}

// 查询该串中是否包含Id
func ContainsId(list string, id0 int64) bool {
	id := ToString(id0)
	l := len(list)
	j := len(id)
	for i := 0; i < l; i++ {
		if list[i:i+j] == id && (i+j == l || list[i+j] == ',') { //判断是否匹配
			return true //删除时需要删除该元素前面的逗号
		}
	}
	return false
}

// 在string类型的list中删除所选Id，在取消关注时使用
func DeleteId(list string, id0 int64) string {
	id := ToString(id0)
	if list == id { //边界条件：第一个元素要删除，且只有一个元素
		return ""
	}
	l := len(list)
	j := len(id)
	for i := 0; i < l; i++ {
		if list[i:i+j] == id && (i+j == l || list[i+j] == ',') { //判断是否匹配
			if i == 0 { //边界条件：第一个元素要删除，且有多个元素
				return list[j+1 : l]
			}
			return list[0:i-1] + list[i+j:l] //删除时需要删除该元素前面的逗号
		}
	}
	return list
}

// 往该串中添加id，用于关注功能时使用
func AddId(list string, id int64) string {
	buf := bytes.NewBufferString(list)
	if list != "" { //边界条件：若列表为空时不需要在前面加逗号
		buf.WriteString(",")
	}
	buf.WriteString(ToString(id))
	return buf.String()
}

func ToString(origin int64) string {
	return strconv.Itoa(int(origin))
}
